package com.zkthink.ceres.pay.wechat.v3.service.ecommerce;

import com.zkthink.ceres.pay.wechat.v3.entity.request.withdraw.CreateWithdrawRequest;
import com.zkthink.ceres.pay.wechat.v3.entity.request.withdraw.QueryWithdrawBillTypeRequest;
import com.zkthink.ceres.pay.wechat.v3.entity.request.withdraw.QueryWithdrawRequest;
import com.zkthink.ceres.pay.wechat.v3.entity.result.withdraw.CreateWithdrawResult;
import com.zkthink.ceres.pay.wechat.v3.entity.result.withdraw.WithdrawBillTypeResult;
import com.zkthink.ceres.pay.wechat.v3.entity.result.withdraw.WithdrawResult;

/**
 * <p>
 * 账户余额提现API
 * 电商平台通过余额提现API帮助二级商户发起账户余额提现申请，完成账户余额提现
 * </p>
 *
 * @author vivi.huang
 * @since 2020/6/16
 */
public interface WithdrawService {

    /**
     * 账户余额提现API
     * 电商平台通过余额提现API帮助二级商户发起账户余额提现申请，完成账户余额提现。
     * @param createWithdrawRequest
     * @return
     */
    CreateWithdrawResult createWithdraw(CreateWithdrawRequest createWithdrawRequest);

    /**
     * 二级商户查询提现状态API
     * 电商平台查询提现状态API
     * 电商平台通过该接口查询其提现结果，该查询服务提供两种查询方式（两种查询方式返回结果一致）：
     *       方式1：微信支付提现单号查询；
     *       方式2：商户提现单号查询。
     * @param queryWithdrawRequest
     * @return
     */
    WithdrawResult queryWithdraw(QueryWithdrawRequest queryWithdrawRequest);

    /**
     * 电商平台提现API
     * 电商平台通过该接口可将其平台的收入进行提现
     * @param createWithdrawRequest
     * @return
     */
    CreateWithdrawResult createMerchantWithdraw(CreateWithdrawRequest createWithdrawRequest);


    /**
     * 按日下载提现异常文件API
     * 电商服务商按日查询并下载提现状态为异常的提现单，提现异常包括提现失败和银行退票。
     * @param queryWithdrawByBillTypeRequest
     * @return
     */
    WithdrawBillTypeResult queryWithdrawByBillType(QueryWithdrawBillTypeRequest queryWithdrawByBillTypeRequest);




}